home *** CD-ROM | disk | FTP | other *** search
/ Programmer Power Tools / Programmer Power Tools.iso / bss / pup.arc / LATTICE.ASH < prev    next >
Text File  |  1984-04-11  |  4KB  |  252 lines

  1. ;
  2. ;Assembly insert file to setup segments
  3. ;and access args on the stack for the various
  4. ;8086 models.
  5. ;
  6. ;Macros and equates defined here:
  7. ;
  8. ;CSEG        Create a code segment and type.
  9. ;ENDC        Close a code segment
  10. ;
  11. ;DSEG        Create a data segment
  12. ;ENDD        Close a data segment
  13. ;
  14. ;FUNC         Use to declare a function. Defines
  15. ;        it as far or near, appropriately. Also
  16. ;    pushes BP, sets BP to SP, and saves DS and ES.
  17. ;    (Requirements changed in v2)
  18. ;
  19. ;ENDF        Declare the end of a function. Restore
  20. ;        registers saved by FUNC.
  21. ;
  22. ;ARG0..9    Defined args from the stack, since
  23. ;        the offset depends on the size of
  24. ;    the return address: mov ax,ARG0 always gets
  25. ;    the right one.
  26. ;
  27. ;LONG        Defined as true if long pointers
  28. ;        are used. Use to conditionally 
  29. ;    assemble ES:[BX] or [BX] for pointer args.
  30. ;
  31. ; --- SMALL MODEL ---
  32. ;
  33. if (_large_code eq 0) and (_large_data eq 0)
  34.  
  35.  _rgf    equ    2
  36.  long    equ    0
  37.  
  38.  cseg macro
  39.   pgroup group prog
  40.   prog segment byte public 'prog'
  41.   assume cs:pgroup
  42.  endm
  43.  
  44.  endc macro
  45.   prog ends
  46.  endm
  47.  
  48.  dseg macro
  49.   dgroup group data
  50.   data segment byte public 'data'
  51.   assume ds:dgroup
  52.  endm
  53.  
  54.  endd macro
  55.   data ends
  56.  endm
  57.  
  58.   %out Small Model
  59. ;
  60. ;Define a function as near or far.
  61. ;
  62.  func macro procname
  63.   public procname
  64.   procname proc near
  65.     push    bp
  66.     mov    bp,sp
  67.     push    ds
  68.     push    es
  69.     mov    ax,ds
  70.     mov    es,ax
  71.  endm
  72. ;
  73. ;Close a function declaration.
  74. ;
  75.  endf macro procname
  76.     pop    es
  77.     pop    ds
  78.     pop    bp
  79.     ret
  80.   procname endp
  81.  endm
  82. endif
  83. ;
  84. ; --- MEDIUM MODEL ---
  85. ;
  86. if (_large_code eq 1) and (_large_data eq 0)
  87.  
  88.  _rgf    equ    4
  89.  long    equ    0
  90.  
  91.  cseg macro
  92.   _code segment byte
  93.   assume cs:_code
  94.  endm
  95.  
  96.  endc macro
  97.   _code ends
  98.  endm
  99.  
  100.  dseg macro
  101.   dgroup group data
  102.   data segment byte public 'data'
  103.   assume ds:dgroup
  104.  endm
  105.  
  106.  endd macro
  107.   data ends
  108.  endm
  109.  
  110.   %out Medium Model
  111. ;
  112. ;Define a function as near or far.
  113. ;
  114.  func macro procname
  115.   public procname
  116.   procname proc far
  117.     push    bp
  118.     mov    bp,sp
  119.     push    ds
  120.     push    es
  121.     mov    ax,ds
  122.     mov    es,ax
  123.  endm
  124. ;
  125. ;Close a function declaration.
  126. ;
  127.  endf macro procname
  128.     pop    es
  129.     pop    ds
  130.     pop    bp
  131.     ret
  132.   procname endp
  133.  endm
  134. endif
  135. ;
  136. ; --- LARGE MODEL ---
  137. ;
  138. if (_large_code eq 0) and (_large_data eq 1)
  139.  
  140.  _rgf    equ    2
  141.  long    equ    1
  142.  
  143.  cseg macro
  144.   cgroup group code
  145.   code segment byte public 'code'
  146.   assume cs:cgroup
  147.  endm
  148.  
  149.  endc macro
  150.   code ends
  151.  endm
  152.  
  153.  dseg macro
  154.   dgroup group data
  155.   data segment byte public 'data'
  156.   assume ds:dgroup
  157.  endm
  158.  
  159.  endd macro
  160.   data ends
  161.  endm
  162.  
  163.   %out Large Model
  164. ;
  165. ;Define a function as near or far.
  166. ;
  167.  func macro procname
  168.   public procname
  169.   procname proc near
  170.     push    bp
  171.     mov    bp,sp
  172.     push    ds
  173.     push    es
  174.     mov    ax,ds
  175.     mov    es,ax
  176.  endm
  177. ;
  178. ;Close a function declaration.
  179. ;
  180.  endf macro procname
  181.     pop    es
  182.     pop    ds
  183.     pop    bp
  184.     ret
  185.   procname endp
  186.  endm
  187. endif
  188. ;
  189. ; --- EXTRA LARGE MODEL ---
  190. ;
  191. if (_large_code eq 1) and (_large_data eq 1)
  192.  
  193.  _rgf    equ    4
  194.  long    equ    1
  195.  cseg macro
  196.   _code segment byte
  197.   assume cs:_code
  198.  endm
  199.  
  200.  endc macro
  201.   _code ends
  202.  endm
  203.  
  204.  dseg macro
  205.   dgroup group data
  206.   data segment byte public 'data'
  207.   assume ds:dgroup
  208.  endm
  209.  
  210.  endd macro
  211.   data ends
  212.  endm
  213.  
  214.   %out Extra Large Model
  215. ;
  216. ;Define a function as near or far.
  217. ;
  218.  func macro procname
  219.   public procname
  220.   procname proc far
  221.     push    bp
  222.     mov    bp,sp
  223.     push    ds
  224.     push    es
  225.     mov    ax,ds
  226.     mov    es,ax
  227.  endm
  228. ;
  229. ;Close a function declaration.
  230. ;
  231.  endf macro procname
  232.     pop    es
  233.     pop    ds
  234.     pop    bp
  235.     ret
  236.   procname endp
  237.  endm
  238. endif
  239. ;
  240. ;Define the args on the stack.
  241. ;
  242. arg0    equ    [bp+_rgf+2]
  243. arg1    equ    [bp+_rgf+4]
  244. arg2    equ    [bp+_rgf+6]
  245. arg3    equ    [bp+_rgf+8]
  246. arg4    equ    [bp+_rgf+10]
  247. arg5    equ    [bp+_rgf+12]
  248. arg6    equ    [bp+_rgf+14]
  249. arg7    equ    [bp+_rgf+16]
  250. arg8    equ    [bp+_rgf+18]
  251. arg8    equ    [bp+_rgf+20]
  252.